﻿#ifndef CRobPointConfigDialog_H
#define CRobPointConfigDialog_H
/********************************************************************************
** @ Date:2024/03/22
** @ Author: HanJiaXin
** @ Description:机器人巡检点配置对话框,用于在巡检路径规划界面中右键菜单弹出
** @ Version:1.0.0
** @ ClassName:
** @ Fun:
********************************************************************************/
#include <QDialog>
#include <QStandardItemModel>
#include <QItemDelegate>
#include "ui_CRobPointConfigDialog.h"
#include "CDevBase.h"
#include "CRBaseData.h"

class CustomItemDelegate : public QItemDelegate
{
public:
	CustomItemDelegate(QObject *parent = nullptr) : QItemDelegate(parent) {}

	QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const override
	{
		if (index.parent().isValid())
		{
			// 对于非一级节点，返回空指针，表示不可编辑
			return nullptr;
		}
		else
		{
			// 对于一级节点，创建默认的编辑器
			return QItemDelegate::createEditor(parent, option, index);
		}
	}
};

class CRobPointConfigDialog : public QDialog
{
	Q_OBJECT

public:
	CRobPointConfigDialog(QString sSceneGuid,QString sPointGuid,QString sPointName,CDevBase* pDev,CPolArea* PolArea,CRBaseData* pBasicData,QWidget *parent = nullptr);
	~CRobPointConfigDialog();

	void refushPointList();//刷新界面中的巡检点树

private:
	void setStyleSheetFile();   //设置样式文件
	void initConnect();         //初始化槽函数连接
	void initUI();              //初始化ui界面
	void setVideoData();        //设置界面中视频监控类的数据

	void showItem(QString sItemGuid,QString sItemName, int nItemType);//根据传入的变量显示巡检项
	void closeConfigWidget();//关闭界面中的所有界面

	void pasteItem();//粘贴巡检项

public slots:
	void slotRefushData();                                 //定时器刷新槽函数
	void slotRefushUI();										 //刷新界面
	void slotCustomContextMenu(const QPoint &);					 //右键树节点
	void slotPushButtonAddCarmerItem();							 //添加云台巡检项
	void slotPushButtonAddSensorItem();							 //添加本体巡检项
	void slotPushButtonExpand();								 //全部展开
	void slotPushButtonShrink();								 //全部收缩
	void treeViewTemplateDoubleClicked(const QModelIndex &index);//巡检点管理树双击信号槽函数
	void slotPushButtonDeSpeedClicked();                         //减速按钮点击槽函数
	void slotPushButtonAddSpeedClicked();                        //加速按钮点击槽函数
	void slotPushButtonResetLocClicked();                        //复位按钮点击槽函数
	void slotPushButtonTalkBackFuncClicked();                    //对讲开按钮槽函数
	void slotPushButtonTalkBackCloseClicked();                   //对讲关按钮槽函数
	void slotPushButtonLampLightOpenClicked();                   //灯光开按钮槽函数
	void slotPushButtonLampLightCloseClicked();                  //灯光开按钮槽函数
	void slotPushButtonFocusingAddClicked();                     //调焦+按钮槽函数
	void slotPushButtonFocusingAddRelease();                     //调焦+按钮释放槽函数
	void slotPushButtonFocusingSubtractClicked();                //调焦-按钮槽函数
	void slotPushButtonFocusingSubtractRelease();                //调焦-按钮释放槽函数

	void slotRobRunUp();   //上 按下
	void slotRobRunDown(); //下 按下
	void slotRobRunRight();//前进 按下
	void slotRobRunLeft(); //后退 按下
	void slotRobRunStop(); //松开(停止)
	void slotRobCenter();//点击中间

	void slotYtUpP();      //云台 按下 上
	void slotYtDownP();    //云台 按下 下
	void slotYtRigthP();   //云台 按下 右
	void slotYtLeftP();    //云台 按下 左
	void slotYtUpR();      //云台 松开 上
	void slotYtDownR();    //云台 松开 下
	void slotYtRigthR();   //云台 松开 右
	void slotYtLeftR();    //云台 松开 左
	void slotYtCenter();   //点击云台中间

signals:
	void sigGetRobZ();//获取机器人z轴位置信号
	void sigSetPanPreset();//设置相机预置点

public:
	QString m_sGuid;//场景GUID
	QString m_sPointGuid;//点位Guid
	QString m_sPointName;//点位名称
	CDevBase* m_pDev;
	CPolArea* m_pPolAreaOld;//巡检区域备份
	CRBaseData* m_pBasicData;
	CDevDataBase* m_pDevData;

private:
	Ui::CRobPointConfigDialogClass ui;
	QStandardItemModel *m_pTreeModel;
	int m_nSpeed;//机器人行走速度
	bool m_bFristOpen;//是否首次打开
	QTimer* m_pTimer;//定时器刷新数据
	QString m_sCopyItemGuid;//点击复制的巡检项
	int m_nIsMove;//机器人是否在运动
};

#endif // !CRobPointConfigDialog_H
